package com.cinema.util;

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * JSON文件存储工具类
 * 用于将对象序列化为JSON文件并存储，以及从JSON文件加载对象
 */
public class JsonFileStorage {
    private static final ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 将对象保存到JSON文件
     * @param data 要保存的对象
     * @param filename 文件名
     * @throws IOException 如果文件操作失败
     */
    public static <T> void saveToFile(T data, String filename) throws IOException {
        // 确保目录存在
        File file = new File(filename);
        File parentDir = file.getParentFile();
        if (parentDir != null && !parentDir.exists()) {
            parentDir.mkdirs();
        }

        String json = objectMapper.writeValueAsString(data);
        Files.write(Paths.get(filename), json.getBytes());
        System.out.println("数据已保存到: " + filename);
    }

    /**
     * 从JSON文件加载对象
     * @param clazz 要加载的对象类型
     * @param filename 文件名
     * @return 加载的对象，如果文件不存在返回null
     * @throws IOException 如果文件操作失败
     */
    public static <T> T loadFromFile(Class<T> clazz, String filename) throws IOException {
        File file = new File(filename);
        if (!file.exists()) {
            System.out.println("文件不存在: " + filename);
            return null;
        }

        String json = new String(Files.readAllBytes(Paths.get(filename)));
        T result = objectMapper.readValue(json, clazz);
        System.out.println("数据已从文件加载: " + filename);
        return result;
    }
}
